yarn workspace
#Monorepos yarn workspaceで、複数のpacakge(project?)を管理 rootのpackage.jsonで、
private:true
workspceに対象packageを配列で指定
対象pacakgeのdirectoryを作って、"name", "version"を書く。
yarn install
rootにnode_modulesができて、その配下に各packageへのsymbolic linkがはられる
各packageで書いたファイルを、普通の参照?で出来るようになる。
しかしこれにはいくつか問題があります。
src/ と functions で TS のバージョンが同じという保証がない
TypeScript の project が異なる
NodeJS の project の単位も異なる
シンボリックリンクが作られ、パッケージをまたいだ開発をしやすくなる
注目すべきは./node_modulesで、そのなかにproject-aというファイルが作られ、それは./project-aへのシンボリックリンクになっている
ルートディレクトリの yarn.lock で依存パッケージを一元管理できる
node_modulesも各パッケージ毎に作成されるのではなく、ルートディレクトリにあるnode_modulesに、currency.jsがインストール
異なるバージョンのパッケージに依存している場合の挙動
対応してくれる。バージョン違う場合は個別にnode_modulesにsaveされる
yarn command
$ yarn add PACKAGE
で通常通り
$ yarn workspace PROJECT add PACKAGE
ルートディレクトリにいるとき
$ yarn workspace run SCIRPT
workspace(ルートでない) scriptが実行される(複数記述があれば、複数)
通常の yarn run SCRIPT は、ルートのscriptが実行
上記の通り、Yarn Workspaces と Lerna は同じような機能を持っています。 Lerna は Yarn Workspaces と一緒に使うためのオプションを提供しています。 Lerna の設定ファイルである、lerna.json に "npmClient": "yarn" と指定することで、内部的に npm の代わりに Yarn を使用できます。